package com.example.demo;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.java_websocket.WebSocket;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft;
import org.java_websocket.framing.Framedata;
import org.java_websocket.handshake.ServerHandshake;

/** This example demonstrates how to create a websocket connection to a server. Only the most important callbacks are overloaded. */
public class ExampleClient extends WebSocketClient {

	public ExampleClient( URI serverUri , Draft draft ) {
		super( serverUri, draft );
	}

	public ExampleClient( URI serverURI ) {
		super( serverURI );
	}

	public ExampleClient( URI serverUri, Map<String, String> httpHeaders ) {
		super(serverUri, httpHeaders);
	}

	@Override
	public void onOpen( ServerHandshake handshakedata ) {
		send("Hello, it is me. Mario :)");
		System.out.println( "opened connection" );
		// if you plan to refuse connection based on ip or httpfields overload: onWebsocketHandshakeReceivedAsClient
	}

	@Override
	public void onMessage( String message ) {
		System.out.println( "received: " + message );
	}

	@Override
	public void onClose( int code, String reason, boolean remote ) {
		// The codecodes are documented in class org.java_websocket.framing.CloseFrame
		System.out.println( "Connection closed by " + ( remote ? "remote peer" : "us" ) + " Code: " + code + " Reason: " + reason );
	}

	@Override
	public void onError( Exception ex ) {
		ex.printStackTrace();
		// if the error is fatal then onClose will be called additionally
	}
	
	@Override
	public void onWebsocketPing(WebSocket conn, Framedata f) {
		System.out.println("received: ping");
		super.onWebsocketPing(conn, f);
	}

	@Override
	public void onWebsocketPong(WebSocket conn, Framedata f) {
		System.out.println("received: pong" + new Date());
	}

	public static void main( String[] args ) throws URISyntaxException {
		//https://docs.spring.io/spring/docs/current/spring-framework-reference/
		//org.apache.tomcat.websocket.WsFrameBase.processDataControl();处理ping,返回pong
		//org.java_websocket.AbstractWebSocket.restartConnectionLostTimer();定时发ping
		ExampleClient c = new ExampleClient( new URI( "ws://localhost:8080/myHandler?a=aaa&b=bbb" )); // more about drafts here: http://github.com/TooTallNate/Java-WebSocket/wiki/Drafts
		try {
			c.connectBlocking();
//			c.send("hello");
			
			TimeUnit.SECONDS.sleep(3);
//			c.close();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}